<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #main{
            width: 400px;
            height: 600px;
            background: url("images/background_1.png");
            margin: 20px auto;
            position: relative;
            overflow: hidden
        }
        #titleScore{
            font-size: 18px;
            font-weight: bold;
            position: absolute;
            margin-top: 5px;
            margin-left: 5px;
            color: #ffffff;
            z-index: 2;
        }
        #stopgame{
            width: 35px;
            height: 35px;
            border: 3px solid #333;
            color: #333;
            border-radius: 40px;
            text-align: center;
            line-height: 32px;
            float: right;
            margin-right: 10px;
            margin-top: 10px;
            /* display: none; */
            cursor: pointer;
            font-weight: bolder;
        }
        #stop{
            width: 400px;
            height: 400px;
            padding-top: 200px;
            position: absolute;
            z-index: 10;
            background-color: rgba(0,0,0,0.6);
            left: 50%;
            margin-left: -200px;
            top:20px;
            display: none;
        }
        .button{
            width: 150px;
            height: 50px;
            color: #ffffff;
            background-color: rgba(0,0,0,0.6);
            text-align: center;
            line-height: 50px;
            border-radius: 20px;
            font-size: 20px;
            font-weight: bolder;
            margin: 0 auto;
            margin-top: 10px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="main">
        <div id="titleScore">
            <div>杀敌：<span id="killNum">0</span></div>
            <div>分数：<span id="killScore">0</span></div>
            <div>玩家血量: <span id="playBlood">5</span></div>
        </div>
        <div id="stopgame" onclick="mystopgame()">||</div>
    </div>
    <div id="stop">
        <div class="button" onclick="continuegame()">继续游戏</div>
        <div class="button" onclick="newgame()">新的游戏</div>
        <div class="button" onclick="closegame()">退出游戏</div>
    </div>
    <script>
        var mainObj=document.getElementById("main");
        var smallPlaneArray=[];//小飞机数组
        var bulletArray=[];//子弹数组

        var upBtn=false;//按键开关
        var leftBtn=false;
        var rightBtn=false;
        var downBtn=false;
        

        var killNum=document.getElementById("killNum");// 杀敌数 
        var killScore=document.getElementById("killScore");//分数

        var player=new playerPlaneProto("images/myplane.gif",50,500,10);
        var samllPlaneTimer=setInterval(createSmallPlane,1000);//创建小飞机
        var smallPlaneMoveTimer=setInterval(smallPlaneMove,50);//小飞机移动
        var ctrlPlayTimer=setInterval(ctrlPlay,30)//30毫秒监听一次是否按下键盘
        var bulletMoveTimer=setInterval(bulletMove,10);//子弹移动
        var crashCheckTimer=setInterval(crashCheck,50);//判断碰撞

        // 暂停按钮
        function mystopgame(){
            var stop=document.getElementById("stop");
            stop.style.display="block";
            clearInterval(samllPlaneTimer);
            clearInterval(smallPlaneMoveTimer);
            clearInterval(ctrlPlayTimer);
            clearInterval(bulletMoveTimer);
            clearInterval(crashCheckTimer);
        }
        // 创建敌方小飞机
        /*
            属性：
                图片节点
                图片
                x坐标
                y坐标
                速度
            行为：
                移动
                初始化  把图片节点添加到main里面
        */
        function SmallPlaneProto(imgSrc,x,y,speed){
            this.imgNode=document.createElement("img");
            this.imgSrc=imgSrc;
            this.x=x;
            this.y=y;
            this.isDead=false;//敌方小飞机存活状态;
            this.exTime=30;//敌方小飞机死亡倒计时
            this.speed=speed;
            this.init=function(){
                this.imgNode.src=this.imgSrc;
                this.imgNode.style.position="absolute";
                this.imgNode.style.left=this.x+"px";
                this.imgNode.style.top=this.y+"px";
                mainObj.appendChild(this.imgNode);
            }
            this.init();
            this.move=function(){
                this.imgNode.style.top=parseInt(this.imgNode.style.top)+this.speed+"px";
            }
        }

        /*创建敌对小飞机*/
        function createSmallPlane(){
            var smallPlane=new SmallPlaneProto("images/enemy1_fly_1.png",parseInt(Math.random()*356),-parseInt(Math.random()*100+40),parseInt(Math.random()*10)+1);
            smallPlaneArray.push(smallPlane);
        }

        // 敌方小飞机移动
        function smallPlaneMove(){
            for(var i=0;i<smallPlaneArray.length;i++){
                if(smallPlaneArray[i].isDead==false){
                    // 活着的时候才能移动，才有移动的方法
                    smallPlaneArray[i].move();
                    if(parseInt(smallPlaneArray[i].imgNode.style.top)>=600){
                        mainObj.removeChild(smallPlaneArray[i].imgNode);
                        smallPlaneArray.splice(i,1);
                    }
                }else{
                    // 死亡
                    // 倒计时--
                    // 死亡时 倒计时每隔50毫秒-1  ，从30减少到0的时候就销毁当前敌方小飞机
                    smallPlaneArray[i].exTime--;
                    if(smallPlaneArray[i].exTime==0){
                        mainObj.removeChild(smallPlaneArray[i].imgNode);
                        smallPlaneArray.splice(i,1);
                    }
                }
            }
        }

        // 玩家飞机
        /*
            属性：
                图片节点
                图片
                x坐标
                y坐标
                速度
            行为：
                移动--->上下左右
                发射子弹
                初始化  把图片节点添加到main里面
        */
        function playerPlaneProto(imgSrc,x,y,speed){
            this.imgNode=document.createElement("img");
            this.imgSrc=imgSrc;
            this.x=x;
            this.y=y;
            this.speed=speed;
            this.init=function(){
                this.imgNode.src=this.imgSrc;
                this.imgNode.style.position="absolute";
                this.imgNode.style.left=this.x+"px";
                this.imgNode.style.top=this.y+"px";
                mainObj.appendChild( this.imgNode);
            }
            this.init();
            this.moveLeft=function(){
                // 到时候根据判断玩家的按键  来执行此事件 进行移动
                if(this.imgNode.style.left=="-80px"){
                    this.imgNode.style.left="440px";
                }else{
                    this.imgNode.style.left=parseInt(this.imgNode.style.left)-this.speed+"px";
                }
            }
            this.moveRight=function(){
                // 到时候根据判断玩家的按键  来执行此事件 进行移动
                if(this.imgNode.style.left=="440px"){
                    this.imgNode.style.left="-80px";
                }else{
                   this.imgNode.style.left=parseInt(this.imgNode.style.left)+this.speed+"px";
                }
            }
            this.moveUp=function(){
                // 到时候根据判断玩家的按键  来执行此事件 进行移动
                if(this.imgNode.style.top=="0px"){
                    this.imgNode.style.top="0px";
                }else{
                    this.imgNode.style.top=parseInt(this.imgNode.style.top)-this.speed+"px";
                }
            }
            this.moveDown=function(){
                // 到时候根据判断玩家的按键  来执行此事件 进行移动
                if(this.imgNode.style.top=="520px"){
                    this.imgNode.style.top="520px";
                }else{
                    this.imgNode.style.top=parseInt(this.imgNode.style.top)+this.speed+"px";
                }
            }
            this.shoot=function(){
                // 根据按键 来执行发射子弹的事件
                var newBullet=new bulletProto("images/bullet1.png",parseInt(this.imgNode.style.left)+30,parseInt(this.imgNode.style.top)-10,10);
                bulletArray.push(newBullet);
            }
        }

        // 在body中按下键盘的时候 移动玩家飞机
        document.body.onkeydown=function(){
            var e=window.event||arguments[0];
            // console.log(e)
            if(e.keyCode==37){
                leftBtn=true;
            }
            if(e.keyCode==38){
                upBtn=true;
            }
            if(e.keyCode==39){
                rightBtn=true;
            }
            if(e.keyCode==40){
                downBtn=true;
            }
            if(e.keyCode==32){
                player.shoot();
            }
        }
        document.body.onkeyup=function(){
            var e=window.event||arguments[0];
            // console.log(e)
            if(e.keyCode==37){
                leftBtn=false;
            }
            if(e.keyCode==38){
                upBtn=false;
            }
            if(e.keyCode==39){
                rightBtn=false;
            }
            if(e.keyCode==40){
                downBtn=false;
            }
        }

        function ctrlPlay(){
            if(leftBtn==true){
                player.moveLeft();
            }
            if(rightBtn==true){
                player.moveRight();
            }
            if(upBtn==true){
                player.moveUp();
            }
            if(downBtn==true){
                player.moveDown();
            }
        }

        // 子弹模板
        function bulletProto(imgSrc,x,y,speed){
            this.imgNode=document.createElement("img");
            this.imgSrc=imgSrc;
            this.x=x;
            this.y=y;
            this.speed=speed;
            this.init=function(){
                this.imgNode.src=this.imgSrc;
                this.imgNode.style.position="absolute";
                this.imgNode.style.left=this.x+"px";
                this.imgNode.style.top=this.y+"px";
                mainObj.appendChild(this.imgNode);
            }
            this.init();
            this.move=function(){
                this.imgNode.style.top=parseInt(this.imgNode.style.top)-this.speed+"px";
            }
        }
        // 子弹移动
        function bulletMove(){
            for(var i=0;i<bulletArray.length;i++){
                bulletArray[i].move();
                if(parseInt(bulletArray[i].imgNode.style.top)<=-20){
                    mainObj.removeChild(bulletArray[i].imgNode);
                    bulletArray.splice(i,1);
                }
            }
        }

        // 碰撞函数
        function crashCheck(){
            for(var i=0;i<smallPlaneArray.length;i++){
                for(var j=0;j<bulletArray.length;j++){
                    // 子弹左边
                    var btLeft=parseInt(bulletArray[j].imgNode.style.left);
                    // 子弹顶部
                    var btTop=parseInt(bulletArray[j].imgNode.style.top);
                    // 小飞机顶部
                    var plTop=parseInt(smallPlaneArray[i].imgNode.style.top);
                    // 小飞机左边
                    var plLeft=parseInt(smallPlaneArray[i].imgNode.style.left);
                    // console.log(btLeft)

                    // if(如果敌方小飞机活着){
                    if(smallPlaneArray[i].isDead==false){
                        if(btLeft>=plLeft&&btLeft<=plLeft+34&&btTop>=plTop&&btTop<plTop+24){
                            // console.log("碰撞了")
                            // 碰撞之后移除 子弹
                            mainObj.removeChild(bulletArray[j].imgNode);
                            bulletArray.splice(j,1);
                            // 敌方小飞机做一个改变 ，替换图片路径
                            smallPlaneArray[i].imgNode.src="images/smallplaneboom.gif";
                            // 把敌方小飞机的存活状态设置为死亡
                            smallPlaneArray[i].isDead=true;

                            // 杀敌积分
                            killNum.innerHTML=parseInt(killNum.innerHTML)+1;
                            killScore.innerHTML=parseInt(killScore.innerHTML)+2;
                        }
                    }
                }
            }
        }
        
    </script>
</body>
</html>